﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using BUSSINESS;
using DTO;

namespace QuanLyGiaPha
{
    public partial class frmThemThanhVien : Form
    {
        private BUS_ThanhVien busThanhVien = new BUS_ThanhVien();
        private BUS_LoaiQuanHe busLoaiQuanHe = new BUS_LoaiQuanHe();
        private BUS_QueQuan busQueQuan = new BUS_QueQuan();
        private BUS_NgheNghiep busNgheNghiep = new BUS_NgheNghiep();
        private BUS_NgyenNhanMat busNguyenNhanMat = new BUS_NgyenNhanMat();
        private BUS_DiaDiemMaiTang busDDMaiTang = new BUS_DiaDiemMaiTang();
        private BUS_LoaiThanhTich busLoaiThanhTich = new BUS_LoaiThanhTich();
        private OpenFileDialog ofd = new OpenFileDialog();
        public string imgHinhAnh = "mypc_info.ico";
        public frmThemThanhVien()
        {
            InitializeComponent();
        }

        
        private void btnOpen_Click(object sender, EventArgs e)
        {
            try
            {
                ofd.Title = "Thêm hình ảnh";
                ofd.InitialDirectory = Environment.CurrentDirectory.Replace(@"\bin\Debug", @"\Resources");
                ofd.Filter = "Image|*.jpg;*.jpeg;*.png;*.gif;*.ico;*.bmp";
                
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    imgThanhVien.Image = Image.FromFile(ofd.FileName);
                    string[] arrFileName = ofd.FileName.Split('\\');
                    imgHinhAnh = arrFileName[arrFileName.Length - 1];
                }
                if (!ofd.FileName.Contains(Environment.CurrentDirectory.Replace(@"\bin\Debug", @"\Resources")))
                {
                    File.Copy(ofd.FileName, ofd.InitialDirectory + @"\" + imgHinhAnh, true);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Lỗi");
            }
        }

        private void frmThemThanhVien_Load(object sender, EventArgs e)
        {
            loadData();
            initGroup();
        }

        private void loadData()
        {
            try
            {
                cboThanhVienCu.DataSource = busThanhVien.getAllThanhVien();
                cboThanhVienCu.DisplayMember = DTO_ThanhVien.TENTHANHVIEN;
                cboThanhVienCu.ValueMember = DTO_ThanhVien.MATHANHVIEN;

                cboLoaiQuanHe.DataSource = busLoaiQuanHe.getAllQuanHe();
                cboLoaiQuanHe.DisplayMember = DTO_LoaiQuanHe.TENQUANHE;
                cboLoaiQuanHe.ValueMember = DTO_LoaiQuanHe.MAQUANHE;

                cboLoaiThanhTich.DataSource = busLoaiThanhTich.getAllThanhTich();
                cboLoaiThanhTich.DisplayMember = DTO_LoaiThanhTich.TENTHANHTICH;
                cboLoaiThanhTich.ValueMember = DTO_LoaiThanhTich.MATHANHTICH;

                DataTable tbNgheNghiep = busNgheNghiep.getAllNgheNghiep();
                DataRow drNgheNghiep = tbNgheNghiep.NewRow();
                drNgheNghiep[DTO_NgheNghiep.MANGHENGHIEP] = -1;
                drNgheNghiep[DTO_NgheNghiep.TENNGHENGHIEP] = "Chọn";
                tbNgheNghiep.Rows.InsertAt(drNgheNghiep, 0);
                cboNgheNghiep.DataSource = tbNgheNghiep;
                cboNgheNghiep.DisplayMember = DTO_NgheNghiep.TENNGHENGHIEP;
                cboNgheNghiep.ValueMember = DTO_NgheNghiep.MANGHENGHIEP;

                DataTable tbQueQuan = busQueQuan.getAllQueQuan();
                DataRow drQueQuan = tbQueQuan.NewRow();
                drQueQuan[DTO_QueQuan.MAQUEQUAN] = -1;
                drQueQuan[DTO_QueQuan.TENQUEQUAN] = "Chọn";
                tbQueQuan.Rows.InsertAt(drQueQuan, 0);
                cboQueQuan.DataSource = tbQueQuan;
                cboQueQuan.DisplayMember = DTO_QueQuan.TENQUEQUAN;
                cboQueQuan.ValueMember = DTO_QueQuan.MAQUEQUAN;

                DataTable tbDDMaiTang = busDDMaiTang.getAllDiaDiem();
                DataRow drDDMaiTang = tbDDMaiTang.NewRow();
                drDDMaiTang[DTO_DiaDiemMaiTang.MADIADIEM] = -1;
                drDDMaiTang[DTO_DiaDiemMaiTang.TENDIADIEM] = "Chọn";
                tbDDMaiTang.Rows.InsertAt(drDDMaiTang, 0);
                cboDDMaiTang.DataSource = tbDDMaiTang;
                cboDDMaiTang.DisplayMember = DTO_DiaDiemMaiTang.TENDIADIEM;
                cboDDMaiTang.ValueMember = DTO_DiaDiemMaiTang.MADIADIEM;

                DataTable tbNguyenNhan = busNguyenNhanMat.GetNguyenNhanMat();
                DataRow drNguyenNhan = tbNguyenNhan.NewRow();
                drNguyenNhan[DTO_NguyenNhanMat.MANGUYENNHAN] = -1;
                drNguyenNhan[DTO_NguyenNhanMat.TENNGUYENNHAN] = "Chọn";
                tbNguyenNhan.Rows.InsertAt(drNguyenNhan, 0);
                cboNguyenNhanMat.DataSource = tbNguyenNhan;
                cboNguyenNhanMat.DisplayMember = DTO_NguyenNhanMat.TENNGUYENNHAN;
                cboNguyenNhanMat.ValueMember = DTO_NguyenNhanMat.MANGUYENNHAN;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        private void cbxDaMat_CheckedChanged(object sender, EventArgs e)
        {
            initGroup();
        }
        private void initGroup()
        {
            if (cbxDaMat.Checked)
            {
                grpBox.Enabled = true;
            }
            else
            {
                grpBox.Enabled = false;
            }
        }

        private void btnDong_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (btnLuu.Text == "Thêm")
            {
                int maxIdThanhVien = 0;
                if (txtTenTVMoi.Text == "" || txtDoi.Text == "")
                {
                    if (txtTenTVMoi.Text == "")
                    {
                        MessageBox.Show("Phải nhập họ tên !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    if (txtDoi.Text == "")
                    {
                        MessageBox.Show("Phải nhập đời !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    return;
                }
                DTO_ThanhVien tv;
                bool checkInsert = true;
                try
                {
                    try
                    {
                        tv = layThongTinThanhVien(this);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    // start insert Thanh vien and get max id 
                    maxIdThanhVien = busThanhVien.addThanhVien(tv);
                    if (maxIdThanhVien != 0)
                    {
                        //Danh sách quan hệ của thành viên
                        List<DTO_ThanhVienQuanHe> listTvQh = new List<DTO_ThanhVienQuanHe>();
                        if (gridViewQuanHe.Rows.Count > 0)
                        {
                            foreach (DataGridViewRow row in gridViewQuanHe.Rows)
                            {
                                DTO_ThanhVienQuanHe tvqh = new DTO_ThanhVienQuanHe();
                                tvqh.MaTvCu = Convert.ToInt16(row.Cells[0].Value);
                                if (tvqh.MaTvCu == 0)
                                {
                                    continue;
                                }
                                tvqh.MaLoaiQH = Convert.ToInt16(row.Cells[2].Value);
                                tvqh.MaTvMoi = maxIdThanhVien;
                                listTvQh.Add(tvqh);
                            }
                        }
                        //start insert thành viên quan hệ
                        if (listTvQh.Count > 0 && !busThanhVien.insertThanhVienQuanHe(listTvQh))
                        {
                            checkInsert = false;
                            MessageBox.Show("Thêm một quan hệ thành viên thất bại ???", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }

                        //Danh sách thành tích của thành viên
                        List<DTO_ThanhVienThanhTich> listTvTT = new List<DTO_ThanhVienThanhTich>();
                        if (gridViewThanhTich.Rows.Count > 0)
                        {
                            foreach (DataGridViewRow row in gridViewThanhTich.Rows)
                            {
                                DTO_ThanhVienThanhTich tvtt = new DTO_ThanhVienThanhTich(0, maxIdThanhVien, Convert.ToInt16(row.Cells[0].Value), Convert.ToDateTime(row.Cells[2].Value));
                                if (tvtt.MaLoaiThanhTich == 0)
                                {
                                    continue;
                                }
                                listTvTT.Add(tvtt);
                            }
                        }
                        //start insert thành viên thành tích
                        if (listTvTT.Count > 0 && !busThanhVien.insertThanhVienThanhTich(listTvTT))
                        {
                            checkInsert = false;
                            MessageBox.Show("Thêm một thành tích thành viên thất bại ???", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }

                        this.Close();
                    }
                    else
                    {
                        checkInsert = false;
                    }
                    if (checkInsert)
                    {
                        MessageBox.Show("Thêm thành viên thành công !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Thêm thành viên thất bại!!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if(btnLuu.Text == "Cập nhật")
            {
                bool checkUpdate = true;
                try
                {
                    DTO_ThanhVien tv = layThongTinThanhVien(this);
                    checkUpdate = busThanhVien.updateThanhVien(tv);
                    //Danh sách quan hệ của thành viên
                    List<DTO_ThanhVienQuanHe> listTvQh = new List<DTO_ThanhVienQuanHe>();
                    if (gridViewQuanHe.Rows.Count > 0)
                    {
                        foreach (DataGridViewRow row in gridViewQuanHe.Rows)
                        {
                            DTO_ThanhVienQuanHe tvqh = new DTO_ThanhVienQuanHe();
                            tvqh.MaTvCu = Convert.ToInt16(row.Cells[0].Value);
                            if (tvqh.MaTvCu == 0)
                            {
                                continue;
                            }
                            tvqh.MaLoaiQH = Convert.ToInt16(row.Cells[2].Value);
                            tvqh.MaTvMoi = tv.MaTV;
                            listTvQh.Add(tvqh);
                        }
                    }
                    //Danh sách thành tích của thành viên
                    List<DTO_ThanhVienThanhTich> listTvTT = new List<DTO_ThanhVienThanhTich>();
                    if (gridViewThanhTich.Rows.Count > 0)
                    {
                        foreach (DataGridViewRow row in gridViewThanhTich.Rows)
                        {
                            DTO_ThanhVienThanhTich tvtt = new DTO_ThanhVienThanhTich(0, tv.MaTV, Convert.ToInt16(row.Cells[0].Value), Convert.ToDateTime(row.Cells[2].Value));
                            if (tvtt.MaLoaiThanhTich == 0)
                            {
                                continue;
                            }
                            listTvTT.Add(tvtt);
                        }
                    }
                    //Xóa quan hệ cũ và thành tích cũ của thành viên
                    checkUpdate = busThanhVien.XoaQuanHeThanhTichOfThanhVien(tv.MaTV);
                    if (!checkUpdate)
                    {
                        MessageBox.Show("Cập nhật quan hệ và thành tích của thành viên thất bại",
                                        "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    //start insert thành viên quan hệ
                    if (listTvQh.Count > 0 && !busThanhVien.insertThanhVienQuanHe(listTvQh))
                    {
                        checkUpdate = false;
                        MessageBox.Show("Cập nhật quan hệ của thành viên thất bại",
                                        "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    //start insert thành viên thành tích
                    if (listTvTT.Count > 0 && !busThanhVien.insertThanhVienThanhTich(listTvTT))
                    {
                        checkUpdate = false;
                        MessageBox.Show("Cập nhật thành tích của thành viên thất bại",
                                         "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    if (checkUpdate)
                    {
                         MessageBox.Show("Cập nhật thành viên thành công",
                                         "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                         this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Cập nhật thành viên thất bại",
                                        "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                     MessageBox.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            
        }

        private int? checkValue(object obj)
        {
            if (obj == null || obj.ToString().Equals("-1"))
            {
                return null;
            }
            return Convert.ToInt16(obj);
        }

        private void cboThanhVienCu_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboThanhVienCu.SelectedIndex != -1)
            {
                cboLoaiQuanHe.Enabled = true;
            }
            else
            {
                cboLoaiQuanHe.Enabled = false;
            }
        }

        private void btnThemThanhTich_Click(object sender, EventArgs e)
        {
            try
            {
                int index = gridViewThanhTich.Rows.Add();
                DataGridViewRow row = gridViewThanhTich.Rows[index];
                row.Cells[0].Value = cboLoaiThanhTich.SelectedValue;
                row.Cells[1].Value = (cboLoaiThanhTich.SelectedItem as DataRowView)[1];
                row.Cells[2].Value = dtPicNgayPhatSinh.Value;
                foreach (DataGridViewRow item in gridViewThanhTich.Rows)
                {
                    if (item.Cells[0].Value.Equals(row.Cells[0].Value))
                    {
                        gridViewThanhTich.Rows.Remove(item);

                        try
                        {
                            gridViewThanhTich.Rows.Add(row);
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Loại thành tích đã được thêm !!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnXoaThanhTich_Click(object sender, EventArgs e)
        {
            try
            {
                gridViewThanhTich.Rows.Remove(gridViewThanhTich.CurrentRow);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Vui lòng chọn dòng khác để xóa!!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            try
            {
                int index = gridViewQuanHe.Rows.Add();
                DataGridViewRow row = gridViewQuanHe.Rows[index];
                row.Cells[0].Value = cboThanhVienCu.SelectedValue;
                row.Cells[1].Value = (cboThanhVienCu.SelectedItem as DataRowView)[1];
                row.Cells[2].Value = cboLoaiQuanHe.SelectedValue;
                row.Cells[3].Value = (cboLoaiQuanHe.SelectedItem as DataRowView)[1];

                foreach (DataGridViewRow item in gridViewQuanHe.Rows)
                {
                    if (item.Cells[0].Value.Equals(row.Cells[0].Value)
                         && item.Cells[2].Value.Equals(row.Cells[2].Value))
                    {
                        gridViewQuanHe.Rows.Remove(item);

                        try
                        {
                            gridViewQuanHe.Rows.Add(row);
                        }
                        catch (Exception)
                        {
                            MessageBox.Show("Loại quan hệ này đã được thêm !!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi : " + ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            try
            {
                gridViewQuanHe.Rows.Remove(gridViewQuanHe.CurrentRow);
            }
            catch (Exception)
            {
                MessageBox.Show("Vui lòng chọn dòng khác để xóa!!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public DTO_ThanhVien layThongTinThanhVien(frmThemThanhVien frm)
        {
            DTO_ThanhVien tv = new DTO_ThanhVien();
            //Thông tin chính của thành viên
            tv.MaTV = txtMaTV.Text == "" ? 0 : Convert.ToInt16(txtMaTV.Text);
            tv.TenTV = frm.txtTenTVMoi.Text;
            tv.GioiTinh = frm.rbtNam.Checked == true ? true : false;
            tv.NgaySinh = frm.dtPickNgaySinh.Value;
            tv.NgayPhatSinh = frm.dtPickNgayPhanPhat.Value;
            tv.DiaChi = frm.txtDiaChi.Text;
            tv.MaQueQuan = checkValue(frm.cboQueQuan.SelectedValue);
            tv.MaNgheNghiep = checkValue(frm.cboNgheNghiep.SelectedValue);
            
            //=tv.DaKetHon = frm.cbxDaKetHon.Checked;
            tv.MaDDMaiTang = checkValue(frm.cboDDMaiTang.SelectedValue);
            tv.MaNguyenNhan = checkValue(frm.cboNguyenNhanMat.SelectedValue);
            tv.HinhAnh = imgHinhAnh;
            if (frm.cbxDaMat.Checked)
            {
                tv.DaMat = true;
            }
            else
            {
                tv.DaMat = null;
            }
            try
            {
                tv.Doi = Convert.ToInt16(frm.txtDoi.Text);
            }
            catch (Exception ex)
            {
                throw new Exception("Đời phải nhập số !!!",ex);
                //return;
            }
            if (tv.DaMat.HasValue && !tv.DaMat.Value)
            {
                tv.NgayGioMat = null;
            }
            else
            {
                tv.NgayGioMat = frm.dtPicNgayGioMat.Value;
            }
            return tv;
        }
    }
}
